git submodule
git submodule は動作モデルや使用手順が誤解されがちなところがあり、それで「怖い」と思われているのないでしょうか
別レポジトリのコミットを参照し、git clone 時に同時にチェックアウトしたりできます。
headを参照するのではなく、コミットを参照する
.gitmodulesに情報がある。
submodule
追加
$ git submodule add url
確認
$ cat .gitmodule
をみると、
code:.gitmodule
path = lib/xxxxx
path = lib/aaa
url = git@github.com:zzz/aaa.git
拡張子に.gitがついたのは、git protocol git@github.com...でaddしたから。
ポイントは、
本体側は、submodule側の特定のcommitを参照する形。
submodule側を update(pullしてheadを進めた)して、そちらを参照したい場合は、headを変更したら、
本体側がcommit hashの変更を検知してるので stagingして、commitすればよい。
submoduleを編集する際
ブランチを作って、そちらで作業して、commitする。
本体で、git submodule updateすると、その時点でのheadのcommitを参照(変更検知)をするので。
(自分の表現が、いまいち理解しきれてないが)
commitを追跡する機能というイメージは持てた。
code: git submodule commands.txt
$ git submodule
absorbgitdirs -- move the git directory of a submodule into its superprojects
add -- add given repository as a submodule
deinit -- unregister a submodule
foreach -- evaluate shell command in each checked-out submodule
init -- initialize a submodule
set-branch -- set the default remote tracking branch for the submodule
status -- show the status of a submodule
summary -- show commit summary between given commit and working tree/index
sync -- synchronize submodule settings
update -- update a submodule
subStree
git-subtreeは外部のgitリポジトリを自分のgitリポジトリのブランチとして取り込み
参考 :
The essence of a Git submodule is that it’s just a directory in our project which points to, well, another git repository. Like a git symbolic link.